python基础学习笔记(一) 基础数据类型

这里我开始抽时间写一下关于python的基础学习笔记。因为python作为一门个人爱好而学习的语言,没有经历过大项目实战的巩固,很容易一段时间不用就会将一些语法忘记得一干二净,所以在此将一些和之前用得比较多的js的特性做出一些简单的对比或者介绍。方便jser入手python。

说明:因为现在python3的普及还算不错了,所以文中的代码运行环境如无特殊说明,都以python3.x版本为主。

这个系列所写的比较适合有相关js经验的同学来看,如果完全是新手,推荐可以学习廖雪峰的python教程

以下为python的主要基本数据类型
  • 空(None)
  • 字符串(String)
  • 布尔类型(Bolean)
  • 数值(Number)
  • 列表(List)
  • 元组(Tuples)
  • 字典(Dictionaries)
空类型(None)

空类型对于我们来说还是不陌生的,只是我们在js常用的是null,在python中我们用None来表示空。它是python中一个特殊的值,None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

字符串(String)

和js里面的字符串类似,也是采用双引号或者单引号来表示。不过在python中还可以使用三引号,既’’’三个单引号来表示一段字符串。python三引号的形式用来输入多行文本,也就是说在三引号之间输入的内容将被原样保留,之中的单号和双引号不用转义,其中的不可见字符比如/n和/t都会被保留,这样的好处是你可以替换一些多行的文本。

声明方式:

1
2
3
4

mystring = "Hello World"
mystring2 = 'Hello World'
mystring3 = '''Hello World'''

三者的运行结果都是一样的。如果你在三个Hello World中间的空白处键入空格,最后打印这三个变量会发现,前两个并没有发生格式上的变化,仅仅只有第三个变量mystring3的”World”掉入了下一行。

布尔类型(Bolean)

python中的布尔类型和js中的也是同样的,用True和False两个值来表示真假。同样的,布尔值也可以用作运算。但是要注意的是,这里的True和False的首字母都是大写。

1
2
3
4
b = True

if b == 1:
print(b + b) #输出的结果为2

在这里我们直接拿b(值为True)和数字1作对比,当b==1时,输出b+b的值。而python中,也是默认将布尔真和数值的1作为等价。而且在运算过程中,也是默认将其作为数值1来运算,布尔假的值则为0。

数值(Number)

Python支持四种不同的数值类型:

int (有符号整数): 通常被称为只是整数或整数,是正或负整数,不带小数点。

long (长整数 ): 或长,是无限大的整数,这样写整数,后面跟着一个大写或小写的L。

float (浮点实数值) : 或浮点数,表示实数,并写入一个小数点分隔的整数部分和小数部分。浮点数也可以是科学记数法,用e或E表示的功率10 (2.5e2 = 2.5 x 102 = 250)。

complex (复数) : 形式如 a + bJ,其中a和b是浮点和J(或j)表示-1的平方根(这是一个虚数)。 a是数的实部,b是虚部。Python编程不使用复杂的数字。

而在js中,我们所用的数字都是Number类型,当然,系统会根据我们的输入来做自动的转换,python也是。

例如:

1
2
3
a = 10
b = 3
print(a/b) #3.3333333333333335

很明显,a是一个整型的数值,b也是一个整型的数值,但是两者做完运算,得到的结果a/b却很明显的是一个float类型,说明系统在运算时,自动将a,b两个数转换为了float类型。这和js也是很相似的。只是js里面没有复数这个类型。这里稍微注意下就可以了。

1
2
3
var a = 10;
var b = 3;
console.log(a/b); // 3.3333333333333335
列表(List)

我们先来看下python中list的声明:

1
2
3
4
5
6
list1 = ["a","b","c","d"]

print(list1) # ['a', 'b', 'c', 'd']

for i in range(len(list1)):
print(list1[i]) #a b c d (间隔处换行)

怎么样,看着还是很眼熟吧。不过在下面的遍历中我们使用的forin语句和js中的for in还是有很大的不同的。python的forin要更加的强力一些,后面我们会陆续了解到。而且在python中没有像js或者其他的常用编程语言那样常用的for循环,例如:for( var i = 0; i < list1.length; i++){ pass },我们会用for i in range() 这样的方法来遍历,当然对一个list取长度也是采用的len()这样的一个方法,区别于js的array.length。

而且,对于list中的数据结构,python和js一样是很宽松的,你既可以放一个string类型,再放一个int类型,也可以数组里面随意嵌套数组,这个和js的使用是几乎一模一样的。

作为引用类型,它和js中的表现也是一致的。

1
2
3
4
5
6
7
8
9
list1 = ["a","b","c","d"]
list2 = list1
list2.append("sa")

print(list1) #['a', 'b', 'c', 'd', 'sa']
print(list2) #['a', 'b', 'c', 'd', 'sa'] 两者都发生了改变

for i in range(len(list1)):
print(list1[i]) #a b c d sa (间隔处换行)
元组(Tuples)

这个数据类型我们在js中没法遇到,因为js对于数组来说就只有一个内置数据类型:Array。

python中的元组我们可以认为是一种更加安全的数组。因为它里面的内容,一旦确定,是无法更改的。所以说,想list中我们常用的append,insert等改变列表内容的方法,在元组面前都是统统失效的。例如:

1
2
3
4
5
6
7
8
list1 = ("a","b","c","d")
list1[0] = "sa" # 报错
list1.append("sa") # 报错

print(list1) # ('a', 'b', 'c', 'd') 注意是圆括号

for i in range(len(list1)):
print(list1[i]) #a b c d (间隔处换行)

但是也存在这样的情况:

1
2
3
list1 = ("a",[1,2,3,4],"c","d")
list1[1].append("sa") #元组list1中的第二个元素为列表,这时是可以改变列表中元素的值的
print(list1) #('a', [1, 2, 3, 4, 'sa'], 'c', 'd')

当元组中只有一个元素时,例如 list = (1) 我们需要在1的后面加上逗号,来让解释器与1数字作区分。写成 list = (1,),而且系统在输出一个元素的元组时,也会同样采用这样的显示方式。

元组可以定义一些用户需要保证其安全的数据,这样就不会被其他人轻易修改。

字典(Dictionaries)

终于要说最令人激动的数据结构了,js里面称作对象字面量,在python里面叫作字典。其用法两者也是很相似的。来,看下我们似曾相识的声明:

1
d = {"a":1,"b":2,"c":3}

是不是觉得和js的一模一样。在python字典中,键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

遍历一个字典,方法一:

1
2
3
4
5
6
7
d = {"a":1,"b":2,"c":3,"d":1}

for key in d.keys():
print(key)
if d[key] == 1:
d[key] = 100
print(d) # {'b': 2, 'd': 100, 'a': 100, 'c': 3} 最后将值为1的键重新赋值为100(字典是无序的)

方法二:

1
2
3
4
5

d = {"a":1,"b":2,"c":3,"d":1}

for d,x in d.items():
print ("key:"+d+",value:"+str(x)) #key:c,value:3 key:b,value:2 key:a,value:1 key:d,value:1

小结

其实除了元组,python中的基本数据结构我们在js都遇见过了,其使用方法也是差不多的,所以两者比较着学,其实应该是很容易上手的。